package com.sunny.design.bridge.message;

/**
 * 桥接模式（Bridge Pattern）
 *  桥接模式也称为桥梁模式、接口模式或柄体（Handle and Body）模式，是将抽象部分与它的具体实现部分分离，使它们都可以独立变化
 *  桥接模式主要目的是通过组合的方式建立两个类之间的联系，而不是继承
 *  桥接模式的核心在于解耦抽象和实现
 *  属于结构型模式
 *
 * 桥接模式包含 4 种角色
 *  抽象（Abstraction）：该类有一个对实现角色的引用，抽象角色中的方法需要实现角色来实现。抽象角色一般为抽象类（构造函数规定子类要传入一个实现对象）
 *  修正抽象（RefinedAbstraction）：Abstract的具体实现，对Abstraction的方法进行完善和扩展，也可以没有这个角色
 *  实现（Implementor）：确定实现维度的基本操作，提供给Abstraction使用。该类一般为接口或抽象类
 *  具体实现（ConcreteImplementor）：Implementor的具体实现
 *
 * 适用场景
 *  在抽象和具体实现之间需要增加更多的灵活性的场景
 *  一个类存在两个（或多个）独立变化的维度，而这两个（或多个）维度都需要独立进行扩展
 *  不希望使用继承，或因为多层继承导致系统类的个数剧增
 *
 * 优点
 *  分离抽象部分及其具体实现部分
 *  提高系统的扩展性
 *  符合开闭原则
 *  符合合成复用原则
 *
 * 缺点
 *  增加了系统的理解与设计难度
 *  需要正确地识别系统中两个独立变化的维度
 *
 * @author Sunny
 * @date 2020/3/9
 */
public abstract class AbstractMessage {
    private IMessage message;

    public AbstractMessage(IMessage message) {
        this.message = message;
    }

    public void send(String message, String toUser) {
        this.message.send(message, toUser);
    }
}
